package com.shujia.scala

import scala.collection.mutable.ListBuffer

object Demo16Fun2 {
  def main(args: Array[String]): Unit = {

    val data = List(1, 2, 3, 5, 3, 2, 3, 4, 5, 6)
    val rdd = new RDD(data)

    def jia(i: Int) = {
      i * i
    }

    val rdd2 = rdd.map(jia)
    println(rdd2.data)


    def jishu(i: Int): Boolean = {
      i % 2 == 0
    }

    val rdd3 = rdd.filter(jishu)
    println(rdd3.data)

    /**
      * 匿名函数
      */

    //逻辑复杂使用这种方式
    rdd.filter((i: Int) => {
      i % 2 == 1
    })

    //简写
    rdd.filter((i: Int) => i % 2 == 1)

    //推荐使用
    rdd.filter(i => i % 2 == 1)

    rdd.filter(_ % 2 == 1)

  }
}

//默认构造函数
class RDD(_data: List[Int]) {
  //大括号里面是默认构造函数的函数体

  //List  不可变集合
  var data: List[Int] = _data

  /**
    * 将data里面的数据都加1然后返回  返回this
    *
    */

  def map(f: Int => Int): RDD = {

    //ListBuffer 可变集合
    val newList = new ListBuffer[Int]

    for (elem <- data) {

      //对元素进行的各种操作  抽象成一个函数（在java中叫抽象成一个接口）
      val r = f(elem)

      newList.+=(r)
    }

    //返回一个新的RDD
    new RDD(newList.toList)
  }


  /**
    *
    * 返回所有奇数
    *
    */

  def filter(f: Int => Boolean): RDD = {

    val newData = new ListBuffer[Int]
    for (elem <- data) {
      if (f(elem)) {
        newData.+=(elem)
      }
    }
    new RDD(newData.toList)
  }


}